package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISocDispatchEmpLessDAO;
import org.jsola.hr.dto.SocDispatchEmpLessAddDTO;
import org.jsola.hr.dto.SocDispatchEmpLessUpdateDTO;
import org.jsola.hr.dto.excel.SocDispatchEmpLessImportDTO;
import org.jsola.hr.entity.SocDispatchEmpLessDO;
import org.jsola.hr.query.SocDispatchEmpLessQuery;
import org.jsola.hr.vo.SocDispatchEmpLessListVO;
import org.jsola.hr.vo.SocDispatchEmpLessVO;
import org.jsola.hr.vo.SocDispatchVO;
import org.jsola.user.core.TokenUser;

import java.util.List;
import java.util.Map;


/**
 * 社保派单员工表_减员
 *
 * @author zhr
 */
public interface ISocDispatchEmpLessService extends IService<ISocDispatchEmpLessDAO, SocDispatchEmpLessDO> {

    /**
     * 新增社保派单员工表_减员
     * @param socDispatchEmpLessAddDTO 新增社保派单员工表_减员DTO
     * @param tokenUser 当前用户
     * @return 社保派单员工表_减员详情信息
     */
    SocDispatchEmpLessVO save(SocDispatchEmpLessAddDTO socDispatchEmpLessAddDTO, TokenUser tokenUser);

    /**
     * 批量新增社保派单员工表_减员
     * @param socDispatchEmpLessImportList 新增社保派单员工表_减员DTO
     * @param socDispatchId                  派单记录id
     * @param isUpdate                       新增还是修改,true:修改
     * @param year                           派单年月,例:2020
     * @param month                          派单年月,例:05
     * @param headMap                        表头
     * @param tokenUser 当前用户
     * @return 社保派单减员记录信息
     */
    SocDispatchVO batchSave(String companyId, String socDispatchId, boolean isUpdate, List<SocDispatchEmpLessImportDTO> socDispatchEmpLessImportList, String year, String month, Map<Integer, String> headMap, TokenUser tokenUser);

    /**
     * 修改社保派单员工表_减员
     * @param socDispatchEmpLessUpdateDTO 修改社保派单员工表_减员DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(SocDispatchEmpLessUpdateDTO socDispatchEmpLessUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除社保派单员工表_减员，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param socDispatchEmpLessIds 社保派单员工表_减员id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...socDispatchEmpLessIds);

    /**
     * 根据社保派单员工表_减员id查找
     * @param socDispatchEmpLessId 社保派单员工表_减员id
     * @param siteId 所属站点id
     * @return 社保派单员工表_减员详情信息
     */
    SocDispatchEmpLessVO selectById(String socDispatchEmpLessId, String siteId);

    /**
     * 查询社保派单员工表_减员
     * @param socDispatchEmpLessQuery 查询条件
     * @param siteId 所属站点id
     * @return 社保派单员工表_减员列表信息
     */
    List<SocDispatchEmpLessListVO> select(SocDispatchEmpLessQuery socDispatchEmpLessQuery, String siteId);

    /**
    * 查询社保派单员工表_减员记录数
    * @param socDispatchEmpLessQuery 查询条件
    * @param siteId 所属站点id
    * @return 社保派单员工表_减员记录数
    */
    int selectCount(SocDispatchEmpLessQuery socDispatchEmpLessQuery, String siteId);

    /**
     * 分页查询社保派单员工表_减员
     * @param socDispatchEmpLessQuery 查询条件
     * @param siteId 所属站点id
     * @return 社保派单员工表_减员列表信息
     */
    Page<SocDispatchEmpLessListVO> selectPage(SocDispatchEmpLessQuery socDispatchEmpLessQuery, String siteId);


    /**
     * 根据社保派单员工表_减员id查找
     * @param socDispatchEmpLessId 社保派单员工表_减员id
     * @param siteId 所属站点id
     * @return 社保派单员工表_减员
     */
    SocDispatchEmpLessDO selectDOById(String socDispatchEmpLessId, String siteId);

    /**
     * 查询社保派单员工表_减员
     * @param socDispatchEmpLessQuery 查询条件
     * @param siteId 所属站点id
     * @return 社保派单员工表_减员列表
     */
    List<SocDispatchEmpLessDO> selectDO(SocDispatchEmpLessQuery socDispatchEmpLessQuery, String siteId);

    /**
     * 根据导入记录删除
     *
     * @param socDispatchIds 导入记录id
     * @param siteId         站点
     */
    void deleteBySocDispatchId(String siteId, String... socDispatchIds);

    /**
     * 导入记录的员工
     *
     * @param socDispatchIds 导入记录id
     * @param siteId         站点
     * @return 导入记录的员工
     */
    List<SocDispatchEmpLessDO> listBySocDispatchIds(String siteId, String... socDispatchIds);

    /**
     * 获取某次导入记录的员工
     *
     * @param socDispatchId 导入记录id
     * @param siteId        站点
     * @return 导入记录的员工参保信息
     */
    List<SocDispatchEmpLessDO> listBySocDispatchId(String socDispatchId, String siteId);

    /**
     * 根据id获取员工
     *
     * @param ids    id
     * @param siteId 站点
     * @return 员工
     */
    List<SocDispatchEmpLessDO> listByIds(String siteId, String... ids);

    /**
     * 将某次导入记录的员工派单
     *
     * @param socDispatchId 导入记录id
     * @param siteId        站点
     */
    void sendBySocDispatchId(String socDispatchId, String siteId);

}


